/*
 * @lc app=leetcode.cn id=125 lang=cpp
 * @lcpr version=30204
 *
 * [125] 验证回文串
 */

// @lcpr-template-start
using namespace std;
#include <algorithm>
#include <array>
#include <bitset>
#include <climits>
#include <deque>
#include <functional>
#include <iostream>
#include <list>
#include <queue>
#include <stack>
#include <tuple>
#include <unordered_map>
#include <unordered_set>
#include <utility>
#include <vector>
// @lcpr-template-end
// @lc code=start
class Solution
{
public:
    // 方法一：
    // // 判断是否是符合要求的小写或者数字
    // bool isCharOrNumber(char ch)
    // {
    //     if ((ch >= 'a' && ch <= 'z') || (ch >= '0' && ch <= '9'))
    //         return true;
    //     else
    //         return false;
    // }

    // bool isPalindrome(string s)
    // {
    //     // 将大写转成小写
    //     for (auto &ch : s)
    //     {
    //         if (ch >= 'A' && ch <= 'Z')
    //         {
    //             ch += 'a' - 'A';
    //         }
    //     }

    //     // 左右遍历，遇到不是小写和数字的跳过
    //     int begin = 0, end = s.size() - 1;
    //     while (begin < end)
    //     {
    //         while (begin < end && isCharOrNumber(s[begin]) == false)
    //         {
    //             ++begin;
    //         }
    //         while (begin < end && isCharOrNumber(s[end]) == false)
    //         {
    //             --end;
    //         }

    //         if (s[begin] != s[end])
    //             return false;
    //         else
    //         {
    //             ++begin;
    //             --end;
    //         }
    //     }
    //     return true;
    // }

    // 方法二:
    bool isPalindrome(string s) {
        int i = 0, j = s.size() - 1;
        while (i < j) {
            if (!isalnum(s[i])) {
                i++;
            } else if (!isalnum(s[j])) {
                j--;
            } else if (tolower(s[i]) == tolower(s[j])) {
                i++;
                j--;
            } else {
                return false;
            }
        }
        return true;
    }
};
// @lc code=end

/*
// @lcpr case=start
// "A man, a plan, a canal: Panama"\n
// @lcpr case=end

// @lcpr case=start
// "race a car"\n
// @lcpr case=end

// @lcpr case=start
// " "\n
// @lcpr case=end

 */
